library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## √ ggplot2 3.3.2     √ purrr   0.3.4
## √ tibble  3.0.4     √ dplyr   1.0.2
## √ tidyr   1.1.2     √ stringr 1.4.0
## √ readr   1.4.0     √ forcats 0.5.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(readr)
library(sf)
## Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(viridis)
## Loading required package: viridisLite
library(readxl)
library(ggpubr)
library(rmapshaper)
## Registered S3 method overwritten by 'geojsonlint':
##   method         from 
##   print.location dplyr
df_vote <- read.csv("countypres_2000-2016.csv")
geo_data <- read_sf("tl_2019_us_county.shp")
geo_data <- rmapshaper::ms_simplify(geo_data, keep = 0.01, keep_shapes = TRUE)
df_vote$FIPS <- as.character(df_vote$FIPS)

df_year <- function(year1, state1, df_vote){
  vote_ <- df_vote %>%
  filter(state == state1) %>%
  filter(year == year1) %>%
  filter(party == 'republican')

  vote_['percentage'] <- vote_['candidatevotes']/vote_['totalvotes']

  vote_$FIPS <- str_pad(vote_$FIPS, width = 5, side="left", pad="0")
  vote_ <- vote_ %>% left_join(geo_data, by = c('FIPS' = 'GEOID'))
  return(vote_)
}

vote_CA_2008 <- df_year(2008, 'California', df_vote)
vote_CA_2012 <- df_year(2012, 'California', df_vote)
vote_CA_2016 <- df_year(2016, 'California', df_vote)
vote_PA_2008 <- df_year(2008, 'Pennsylvania', df_vote)
vote_PA_2012 <- df_year(2012, 'Pennsylvania', df_vote)
vote_PA_2016 <- df_year(2016, 'Pennsylvania', df_vote)
vote_TX_2008 <- df_year(2008, 'Texas', df_vote)
vote_TX_2012 <- df_year(2012, 'Texas', df_vote)
vote_TX_2016 <- df_year(2016, 'Texas', df_vote)
unemployment <- read_excel('Unemployment.xls', range = cell_limits(c(8, 1)))

unemployment <- unemployment %>%
  select(Unemployment_rate_2008,Unemployment_rate_2012,Unemployment_rate_2016, FIPStxt)
df_unemployment <- function(fips, unemployment){
  df <- unemployment %>%
    filter(substr(FIPStxt,1,2) == fips) %>%
    left_join(geo_data, by = c('FIPStxt' = 'GEOID')) %>% tail(-1)
  
  return(df)
}

CA_unemployment <- df_unemployment('06', unemployment)
PA_unemployment <- df_unemployment('42', unemployment)
TX_unemployment <- df_unemployment('48', unemployment)
fig_CA_2008 <- ggplotly(
  ggplot(vote_CA_2008, aes(geometry=geometry)) +
  geom_sf(aes(fill = percentage)) + 
  scale_fill_viridis_c(option = "plasma", trans = "sqrt") + 
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_CA_2012 <- ggplotly(
  ggplot(vote_CA_2012, aes(geometry=geometry)) +
  geom_sf(aes(fill = percentage)) + 
  scale_fill_viridis_c(option = "plasma", trans = "sqrt") + 
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_CA_2016 <- ggplotly(
  ggplot(vote_CA_2016, aes(geometry=geometry)) +
  geom_sf(aes(fill = percentage)) + 
  scale_fill_viridis_c(option = "plasma", trans = "sqrt") + 
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_CA_unemployment_2008 <- ggplotly(
  ggplot(CA_unemployment, aes(geometry=geometry)) + 
  geom_sf(aes(fill = Unemployment_rate_2008)) +
  scale_fill_viridis_c(option = "viridis", trans = "sqrt") +  
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_CA_unemployment_2012 <- ggplotly(
  ggplot(CA_unemployment, aes(geometry=geometry)) + 
  geom_sf(aes(fill = Unemployment_rate_2012)) +
  scale_fill_viridis_c(option = "viridis", trans = "sqrt") +  
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_CA_unemployment_2016 <- ggplotly(
  ggplot(CA_unemployment, aes(geometry=geometry)) + 
  geom_sf(aes(fill = Unemployment_rate_2008)) +
  scale_fill_viridis_c(option = "viridis", trans = "sqrt") +  
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig <- subplot(fig_CA_2008, fig_CA_unemployment_2008,
               fig_CA_2012, fig_CA_unemployment_2012,
               fig_CA_2016, fig_CA_unemployment_2016, shareX = T, shareY = T, nrows = 3)

fig %>% layout(annotations = list(
  list(x = 0.5, y = 1.05, text = 'California',showarrow = F, xref='paper', yref='paper'),
  list(x = 0.1, y = 1.023, text = '2008 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.9, y = 1.023, text = '2008 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.1, y = 0.7, text = '2012 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.9, y = 0.7, text = '2012 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.1, y = 0.30, text = '2016 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.9, y = 0.30, text = '2016 Unemployment Rate', showarrow = F, xref='paper', yref='paper')
),
showlegend = FALSE
)
fig
fig_PA_2008 <- ggplotly(
  ggplot(vote_PA_2008, aes(geometry=geometry)) +
  geom_sf(aes(fill = percentage)) + 
  scale_fill_viridis_c(option = "inferno", trans = "sqrt") + 
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_PA_2012 <- ggplotly(
  ggplot(vote_PA_2012, aes(geometry=geometry)) +
  geom_sf(aes(fill = percentage)) + 
  scale_fill_viridis_c(option = "inferno", trans = "sqrt") + 
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_PA_2016 <- ggplotly(
  ggplot(vote_PA_2016, aes(geometry=geometry)) +
  geom_sf(aes(fill = percentage)) + 
  scale_fill_viridis_c(option = "inferno", trans = "sqrt") + 
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_PA_unemployment_2008 <- ggplotly(
  ggplot(PA_unemployment, aes(geometry=geometry)) + 
  geom_sf(aes(fill = Unemployment_rate_2008)) +
  scale_fill_viridis_c(option = "cividis", trans = "sqrt") +  
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_PA_unemployment_2012 <- ggplotly(
  ggplot(PA_unemployment, aes(geometry=geometry)) + 
  geom_sf(aes(fill = Unemployment_rate_2012)) +
  scale_fill_viridis_c(option = "cividis", trans = "sqrt") +  
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_PA_unemployment_2016 <- ggplotly(
  ggplot(PA_unemployment, aes(geometry=geometry)) + 
  geom_sf(aes(fill = Unemployment_rate_2008)) +
  scale_fill_viridis_c(option = "cividis", trans = "sqrt") +  
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)


fig <- subplot(fig_PA_2008, fig_PA_unemployment_2008,
               fig_PA_2012, fig_PA_unemployment_2012,
               fig_PA_2016, fig_PA_unemployment_2016, shareX = T, shareY = T, nrows = 3)

fig %>% layout(annotations = list(
  list(x = 0.5, y = 1.05, text = 'Pennsylvania',showarrow = F, xref='paper', yref='paper'),
  list(x = 0.1, y = 1.023, text = '2008 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.9, y = 1.023, text = '2008 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.1, y = 0.7, text = '2012 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.9, y = 0.7, text = '2012 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.1, y = 0.30, text = '2016 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.9, y = 0.30, text = '2016 Unemployment Rate', showarrow = F, xref='paper', yref='paper')
),
showlegend = FALSE
)
fig
fig_TX_2008 <- ggplotly(
  ggplot(vote_TX_2008, aes(geometry=geometry)) +
  geom_sf(aes(fill = percentage)) + 
  scale_fill_viridis_c(option = "inferno") + 
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_TX_2012 <- ggplotly(
  ggplot(vote_TX_2012, aes(geometry=geometry)) +
  geom_sf(aes(fill = percentage)) + 
  scale_fill_viridis_c(option = "inferno") + 
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_TX_2016 <- ggplotly(
  ggplot(vote_TX_2016, aes(geometry=geometry)) +
  geom_sf(aes(fill = percentage)) + 
  scale_fill_viridis_c(option = "inferno") + 
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_TX_unemployment_2008 <- ggplotly(
  ggplot(TX_unemployment, aes(geometry=geometry)) + 
  geom_sf(aes(fill = Unemployment_rate_2008)) +
  scale_fill_viridis_c(option = "magma", trans = "sqrt") +  
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_TX_unemployment_2012 <- ggplotly(
  ggplot(TX_unemployment, aes(geometry=geometry)) + 
  geom_sf(aes(fill = Unemployment_rate_2012)) +
  scale_fill_viridis_c(option = "magma", trans = "sqrt") +  
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)

fig_TX_unemployment_2016 <- ggplotly(
  ggplot(TX_unemployment, aes(geometry=geometry)) + 
  geom_sf(aes(fill = Unemployment_rate_2008)) +
  scale_fill_viridis_c(option = "magma", trans = "sqrt") +  
  theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)


fig <- subplot(fig_TX_2008, fig_TX_unemployment_2008,
               fig_TX_2012, fig_TX_unemployment_2012,
               fig_TX_2016, fig_TX_unemployment_2016, shareX = T, shareY = T, nrows = 3)

fig %>% layout(annotations = list(
  list(x = 0.5, y = 1.05, text = 'Texas',showarrow = F, xref='paper', yref='paper'),
  list(x = 0.1, y = 1.023, text = '2008 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.9, y = 1.023, text = '2008 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.1, y = 0.7, text = '2012 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.9, y = 0.7, text = '2012 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.1, y = 0.30, text = '2016 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
  list(x = 0.9, y = 0.30, text = '2016 Unemployment Rate', showarrow = F, xref='paper', yref='paper')
),
showlegend = FALSE
)
fig